package app.caihan.wanandroid.base.event

import app.caihan.scframe.api.retrofit2.checkResult
import app.caihan.wanandroid.base.AppInfo
import app.caihan.wanandroid.model.ScWanAndroidFactory
import app.caihan.wanandroid.model.bean.User
import app.caihan.wanandroid.viewmodel.share.SharedViewModel
import com.kunminx.architecture.ui.callback.UnPeekLiveData

/**
 * APP全局的ViewModel，可以存放公共数据，当他数据改变时，所有监听他的地方都会收到回调,也可以做发送消息
 * 比如 全局可使用的 地理位置信息，账户信息,App的基本配置等等，
 *
 * @author Seven-C
 * @date 2020/7/27
 */
class AppViewModel : SharedViewModel() {

    private val repository by lazy { ScWanAndroidFactory.makeWanRepository() }

    //App的账户信息,如果使用MutableLiveData的话,会存在数据倒灌的问题
    var userInfo: UnPeekLiveData<User> = UnPeekLiveData.Builder<User>()
        .setAllowNullValue(false)
        .create()

    //App主题颜色 中大型项目不推荐以这种方式改变主题颜色，比较繁琐耦合，且容易有遗漏某些控件没有设置主题色
    var appColor: UnPeekLiveData<Int> = UnPeekLiveData.Builder<Int>()
        .setAllowNullValue(false)
        .create()
//
//    //App 列表动画
//    var appAnimation = IntLiveData()

    init {
        //默认值保存的账户信息，没有登陆过则为null
        launchUI {
            repository.getUserDb()
                .checkResult(
                    onSuccess = {
                        userInfo.value = it
                        AppInfo.userInfo = it
                    },
                    onError = { userInfo.value = null }
                )
        }
        appColor.value = 1
    }
}